export interface UploadProgressCallback {
  (loaded: number, total: number): void;
}
/**
 * 文件分片实体
 */
export interface FileChunkEntity {
  /**
   * xxxx
   */
  id: number;
  /**
   * 文件ID
   */
  fileMd5: string;
  /**
   * 分片大小
   */
  size: number;
  /**
   * 单次上传标识/标识一个应用或用户
   */
  key: string;
  /**
   * 分片md5
   */
  md5: string;
  /**
   * 分片索引
   */
  index: number;
  /**
   * 分片存储路径
   */
  path: string;
  /**
   *
   */
  createTime: number;
  /**
   *
   */
  updateTime: number;
  /**
   *
   */
  deleteTime: number | null;
}

/**
 * 检测文件
 */
export interface FileCheckEntity {
  name: string;
  size: number;
  hash: string;
  uploaded: boolean;
  chunkSize: number;
  chunkCount: number;
  progress: number;
  updateTime: number;
  chunks: FileChunkEntity[];
}

/**
 * 文件实体
 */
export interface FileEntity {
  /**
   *
   */
  id: number;
  /**
   * 全局资源
   */
  guid: string;
  /**
   * 文件名
   */
  name: string;
  /**
   * 文件原始名
   */
  origin: string;
  /**
   * 文件保存路径
   */
  path: string;
  /**
   * NULL
   */
  thumb: string;
  /**
   * 拓展名
   */
  extension: string;
  /**
   * MIME
   */
  mime: string;
  /**
   * 文件大小
   */
  size: number;
  /**
   * MD5
   */
  md5: string;
  /**
   *
   */
  hash: string;
  /**
   * 标识文件是否可用
   */
  state: number;
  /**
   * 所有者
   */
  owner: number;
  /**
   * 所有组
   */
  group: number;
  /**
   * 所属应用
   */
  app: number;
  /**
   * 类型
   */
  type: number;
  /**
   * '属性'
   */
  property: string;
  /**
   * 类型属性
   */
  extra: number;
  /**
   * 备注
   */
  remark: string;
  /**
   * 创建时间
   */
  createTime: number;
  /**
   * 修改时间
   */
  updateTime: number;
  /**
   * 删除时间
   */
  deleteTime: number;
}

/**
 * 节点类型
 */
export const FileNodeType = {
  /**
   * 文件
   */
  TYPE_FILE: 1,
  /**
   * 文件夹
   */
  TYPE_FOLDER: 2,
};

/**
 * 应用文件节点
 */
export interface FileNodeEntity {
  /**
   * ID
   */
  id: number;
  /**
   * 父文件夹
   */
  pid: number;
  /**
   * 文件ID
   */
  fileId: number;
  /**
   * 1：文件/2：文件夹
   */
  type: number;
  /**
   * 文件夹?名
   */
  name: string;
  /**
   * 文件大小
   */
  size: number;
  /**
   * 拓展名
   */
  ext: string;
  /**
   * 文件MIME
   */
  mime: string;
  /**
   * 文件所有者
   */
  own: number;
  /**
   * 文件所有组
   */
  grp: number;

  /**
   * 系统|自己 读 写 删除 隐藏 加密
   */
  mode: number;
  /**
   * ACL访问控制信息
   */
  acl: string;
  /**
   * 相关描述信息
   */
  remark: string;
  /**
   * 创建时间
   */
  createTime: number;
  /**
   * 修改时间
   */
  updateTime: number;
  /**
   * 删除时间
   */
  deleteTime: number;
}
